package fr.utbm.tx52.contactsManagement;

import java.util.List;

import fr.utbm.tx52.R;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


/**
 *	Un adaptateur pour afficher la liste des contacts dans une listActivity
 */
public class ContactsAdapter extends BaseAdapter {

	/**
	 * Le context de l'adapter
	 */
    private Context mContext;
    
    /**
     * Le calque de l'adapter
     */
    private LayoutInflater mInflater;
    
    /**
     * La liste des contacts avec lequels on remplit l'adapter
     */
    private List<Contact> contacts;
    
    /**
     * Chaque contact a son viewHolder
     */
    private ViewHolder holder;

    
    /**
     * Construit l'adapter
     * 
     * @param c
     * 			Le context pour lequel on créé l'adapter
     * @param contacts
     * 			La liste des contacts qui vont peupler la liste
     */
    public ContactsAdapter(Context c, List<Contact> contacts) {
        mContext = c;
        mInflater = LayoutInflater.from(mContext);
        this.contacts = contacts;
        
    }

    /**
     * Inner class pour les types de données que l'on trouve pour chaque contact
     */
    private static class ViewHolder {
    	/**
    	 * La photo du contacty
    	 */
        ImageView photo;
        /**
         * Le nom du contact
         */
        TextView name;
        /**
         * L'identifiant, non affiché mais utile pour les tests
         */
        TextView id;
    }

    /**
     * Compte le nombre de contacts dans la liste
     * 
     * @return Le nombre de contacts dans la liste
     */
    public int getCount() {
        return contacts.size();
    }

    /**
     * Renvoi le contact à la position donnée
     * 
     * @param position
     * 				La position dont on veut le contact
     * 
     * @return Le contact à la position donnée
     */
    public Object getItem(int position) {
        return contacts.get(position);
    }

    /**
     * Identifie une ligne
     * 
     * @return Renvoi l'identifiant d'une ligne
     */
    public long getItemId(int position) {
        return position;
    }

    /**
     * Rempli une ligne de la liste des contacts
     */
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.contact, null);

            holder = new ViewHolder();
            holder.photo = (ImageView) convertView.findViewById(R.id.list_item_image);
            holder.name = (TextView) convertView.findViewById(R.id.list_item_name);
            holder.id = (TextView) convertView.findViewById(R.id.list_item_id);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        Contact c = (Contact) getItem(position);

        holder.photo.setImageBitmap(c.getBitmap());
        holder.name.setText(c.getName());
        holder.id.setText(c.getPhoneNumber());

        return convertView;
    }
	

}
